package com.etime.shycourse.services.interfaces;

import com.etime.shycourse.dto.LessonAndMediaBankDto;
import com.etime.shycourse.dto.LessonAndMediaBankDtos;
import com.etime.shycourse.pojo.Chapter;
import com.etime.shycourse.pojo.Lesson;
import com.etime.shycourse.pojo.Mediabank;

import java.util.List;

/**
 * <p>
 * 课时服务类
 * </p>
 *
 * @author wb
 * @since 2021-12-22
 */
public interface LessonServices {

    /**
     * 修改一条数据 课时
     * 根据课时id修改 lessonid
     *
     * @param lesson
     * @return int
     */
    int updateLessonById(Lesson lesson);

    /**
     * 根据课时id
     * 查询课时一条数据 课时内容+多媒体()
     * <p>
     *
     * @param lessonId
     * @return LessonAndMediaBankDto
     */
    LessonAndMediaBankDto selectLessonAndMediaBankDtoBy(Integer lessonId);

    /**
     * 根据课程id 查询所有其课程中所的课时(List) 文本+视频
     *
     * @param chapterId
     * @return List<Lesson>
     */
    List<LessonAndMediaBankDtos> selectLessonList(Integer chapterId);


    /**
     * 根据课程id courseId 查询到 章节和课时的详细信息
     * 一个课程里面有多个课时
     *
     * @param courseId 课程id
     * @return ListMessage<Chapter>
     */
    List<Chapter> selectCourseLessonByIds(Integer courseId);


    /**
     * 添加一条数据 课时
     * 改为token 2022 - 01 - 21 17:08:13
     *
     * @param lesson 默认数据
     *               lessonuserid 课时发布人id = 登录用户的id
     *               lessonusertruename 课时发布人姓名 = 登录用户的姓名
     *               lessoncreatetime 课时创建时间 = 当前时间
     *               lessonupdatetime 课时最后修改时间 = 当前时间
     *               lessonviewnum 课时查看次数 = 0
     *               lessonbuynum 课时购买次数 =0
     *               lessonstate 课时状态 =1 （默认发布）
     *               lessontriable = 0 （目前不开放试听功能）
     *               lessontrylen 允许试听时长 = 0
     * @return int
     */
    int insertLesson(Lesson lesson, String token);

    /**
     * 添加一条数据 课时多媒体文件
     * 改为token 2022 - 01 - 21 17:08:13
     *
     * @param mediabank 默认数据
     *                  mediatitle	        文件名称       源文件的名称
     *                  mediatype           文件类型	保存源文件的后缀名
     *                  mediaurl            文件路径	文件上传后，返回的路径
     *                  medialen            播放时间	视频的播放时长	          可以在上传时，用js获取
     *                  mediacreatetime     文件创建时间	当前时间
     *                  mediauserid         文件上传人id	当前登录人id	         从redis中使用token获取
     *                  mediausertruename   文件上传人姓名 当前登录人姓名    	从redis中使用token获取
     *                  mediastate          文件状态	默认：0(待转码)
     *                  mediadelete         文件删除状态	默认：0（正常）
     *                  mediaauditstate     文件审核状态	默认：1（已审核）
     *                  mediaauditdesc      文件审核意见	    空
     *                  mediaaudituserid    文件审核人id	    空
     *                  mediaauditname      文件审核人姓名	空
     * @return mediabank的 id (mediaid)
     */
    int insertMediaBank(Mediabank mediabank, String token);

    /**
     * 上传课时中包含多媒体文件
     * 改为token
     *
     * @param dto LessonAndMediaBankDto
     * @return int 成功 >0 失败=0
     */
    int insertMediaBankAndLesson(LessonAndMediaBankDto dto, String token);


    /**
     * 修改一条数据 课时信息+多媒体文件信息
     * 根据课时id修改 dto.lessonid
     * 根据视频id修改 dto.mediaid
     *
     * @param dto
     * @return int
     */
    int updateLessonMediaBankById(LessonAndMediaBankDto dto);

    /**
     * 根据课时id 物理删除课时
     * 删除成功返回=1 失败=返回0
     *
     * @param LessonId
     * @return int
     */
    int deleteLessonById(Integer LessonId);
}
